home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE
-
- MODULE 'graphics/rastport'
-
- PROC ifu(str,l)
- DEF c
- IF str[1] < "a" THEN RETURN NIL
- c := str[]
- SELECT 128 OF c
- CASE "A"
- IF StrCmp(str, 'Abs',l) THEN RETURN STRLEN
- CASE "B"
- IF StrCmp(str, 'Bounds',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Box',l) THEN RETURN STRLEN
- CASE "C"
- IF StrCmp(str, 'Char',l) THEN RETURN STRLEN
- IF StrCmp(str, 'CtrlC',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Colour',l) THEN RETURN STRLEN
- IF StrCmp(str, 'CloseW',l) THEN RETURN STRLEN
- IF StrCmp(str, 'CloseS',l) THEN RETURN STRLEN
- CASE "D"
- IF StrCmp(str, 'Dispose',l) THEN RETURN STRLEN
- IF StrCmp(str, 'DiposeLink',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Div',l) THEN RETURN STRLEN
- CASE "E"
- IF StrCmp(str, 'Eor',l) THEN RETURN STRLEN
- IF StrCmp(str, 'EstrLen',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Even',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Exists',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Eval',l) THEN RETURN STRLEN
- CASE "F"
- IF StrCmp(str, 'FastNew',l) THEN RETURN STRLEN
- IF StrCmp(str, 'FastDispose',l) THEN RETURN STRLEN
- IF StrCmp(str, 'FastDiposeList',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Forward',l) THEN RETURN STRLEN
- IF StrCmp(str, 'FileLength',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ForAll',l) THEN RETURN STRLEN
- IF StrCmp(str, 'FreeStack',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Ftan',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fabs',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Facos',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fsin',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fsincos',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fcosh',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Ftanh',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fexp',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Ffieee',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Ffloor',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Flog',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Flog10',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fpow',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fsinh',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fsqrt',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Ftieee',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Fcos',l) THEN RETURN STRLEN
- CASE "H"
- IF StrCmp(str, 'Hbox',l) THEN RETURN STRLEN
- CASE "I"
- IF StrCmp(str, 'Inp',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Int',l) THEN RETURN STRLEN
- IF StrCmp(str, 'InStr',l) THEN RETURN STRLEN
- CASE "K"
- IF StrCmp(str, 'KickVersion',l) THEN RETURN STRLEN
- CASE "L"
- IF StrCmp(str, 'LeftMouse',l) THEN RETURN STRLEN
- IF StrCmp(str, 'List',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Long',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListItem',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListLen',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListMax',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Link',l) THEN RETURN STRLEN
- IF StrCmp(str, 'LowerStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListCmp',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListCopy',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ListAdd',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Line',l) THEN RETURN STRLEN
- CASE "M"
- IF StrCmp(str, 'Max',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Min',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Mul',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Mod',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Mouse',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MouseX',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MouseY',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MidStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MapList',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MsgCode',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MsgQualifier',l) THEN RETURN STRLEN
- IF StrCmp(str, 'MsgIAddr',l) THEN RETURN STRLEN
- CASE "N"
- IF StrCmp(str, 'New',l) THEN RETURN STRLEN
- IF StrCmp(str, 'NewR',l) THEN RETURN STRLEN
- IF StrCmp(str, 'NewM',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Next',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Not',l) THEN RETURN STRLEN
- CASE "O"
- IF StrCmp(str, 'Odd',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Out',l) THEN RETURN STRLEN
- IF StrCmp(str, 'OpenW',l) THEN RETURN STRLEN
- IF StrCmp(str, 'OpenS',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ObjectName',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ObjectSize',l) THEN RETURN STRLEN
- CASE "P"
- IF StrCmp(str, 'PutLong',l) THEN RETURN STRLEN
- IF StrCmp(str, 'PutInt',l) THEN RETURN STRLEN
- IF StrCmp(str, 'PutChar',l) THEN RETURN STRLEN
- IF StrCmp(str, 'PrintF',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Plot',l) THEN RETURN STRLEN
- CASE "R"
- IF StrCmp(str, 'ReadStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'RightStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'RealVal',l) THEN RETURN STRLEN
- IF StrCmp(str, 'RealF',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Rnd',l) THEN RETURN STRLEN
- IF StrCmp(str, 'RndQ',l) THEN RETURN STRLEN
- IF StrCmp(str, 'ReThrow',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Raise',l) THEN RETURN STRLEN
- CASE "S"
- IF StrCmp(str, 'String',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StrMax',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Shl',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Shr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StrCmp',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StrCopy',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StrAdd',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Sign',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StrLen',l) THEN RETURN STRLEN
- IF StrCmp(str, 'StringF',l) THEN RETURN STRLEN
- IF StrCmp(str, 'SelectList',l) THEN RETURN STRLEN
- IF StrCmp(str, 'SetStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'SetList',l) THEN RETURN STRLEN
- IF StrCmp(str, 'SetColour',l) THEN RETURN STRLEN
- IF StrCmp(str, 'SetStdRast',l) THEN RETURN STRLEN
- CASE "T"
- IF StrCmp(str, 'TrimStr',l) THEN RETURN STRLEN
- IF StrCmp(str, 'Throw',l) THEN RETURN STRLEN
- IF StrCmp(str, 'TextF',l) THEN RETURN STRLEN
- CASE "U"
- IF StrCmp(str, 'UpperStr',l) THEN RETURN STRLEN
- CASE "V"
- IF StrCmp(str, 'Val',l) THEN RETURN STRLEN
- CASE "W"
- IF StrCmp(str, 'WaitIMessage',l) THEN RETURN STRLEN
- IF StrCmp(str, 'WriteF',l) THEN RETURN STRLEN
- IF StrCmp(str, 'WaitLeftMouse',l) THEN RETURN STRLEN
- ENDSELECT
-
- ENDPROC NIL
-
- PROC ikw(str,l)
- DEF c
-
- IF str[1] > "Z" THEN RETURN NIL
-
- c := str[]
-
- SELECT 128 OF c
- CASE "A"
- IF StrCmp(str, 'ALL',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'AND',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ARRAY',l) THEN RETURN STRLEN, 5
- CASE "B"
- IF StrCmp(str, 'BUT',l) THEN RETURN STRLEN, 5
- CASE "C"
- IF StrCmp(str, 'CONST',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'CHAR',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'CASE',l) THEN RETURN STRLEN, 7
- CASE "D"
- IF StrCmp(str, 'DEF',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'DIR',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'DO',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'DEFAULT',l) THEN RETURN STRLEN, 7
- CASE "E"
- IF StrCmp(str, 'EXCEPT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'END',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ENDPROC',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'EXPORT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ENUM',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ENDOBJECT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ELSE',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'ELSEIF',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'ENDIF',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'ENDWHILE',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'ENDLOOP',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'ENDFOR',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'EMPTY',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'ENDSELECT',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'EXIT',l) THEN RETURN STRLEN, 7
- CASE "F"
- IF StrCmp(str, 'FOR',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'FALSE',l) THEN RETURN STRLEN, 5
- CASE "G"
- CASE "H"
- IF StrCmp(str, 'HANDLE',l) THEN RETURN STRLEN, 5
- CASE "I"
- IF StrCmp(str, 'IS',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'INT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'IF',l) THEN RETURN STRLEN, 7
- CASE "J"
- IF StrCmp(str, 'JUMP',l) THEN RETURN STRLEN, 7
- CASE "K"
- CASE "L"
- IF StrCmp(str, 'LIST',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'LONG',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'LOOP',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'LIBRARY',l) THEN RETURN STRLEN, 5
- CASE "M"
- IF StrCmp(str, 'MODULE',l) THEN RETURN STRLEN, 5
- CASE "N"
- IF StrCmp(str, 'NEW',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'NIL',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'NEWFILE',l) THEN RETURN STRLEN, 5
- CASE "O"
- IF StrCmp(str, 'OBJECT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'OPT',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'OF',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'OR',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'OLDFILE',l) THEN RETURN STRLEN, 5
- CASE "P"
- IF StrCmp(str, 'PROC',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'PTR',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'PRIVATE',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'PUBLIC',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'PREPROCESS',l) THEN RETURN STRLEN, 5
- CASE "Q"
- CASE "R"
- IF StrCmp(str, 'REG',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'REPEAT',l) THEN RETURN STRLEN, 6
- IF StrCmp(str, 'READWRITE',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'RETURN',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'RAISE',l) THEN RETURN STRLEN, 5
- CASE "S"
- IF StrCmp(str, 'SET',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'SELECT',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'STRLEN, 5',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'SIZEOF',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'STEP',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'STRING',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'STACK',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'SUPER',l) THEN RETURN STRLEN, 5
- CASE "T"
- IF StrCmp(str, 'TO',l) THEN RETURN STRLEN, 5
- IF StrCmp(str, 'THEN',l) THEN RETURN STRLEN, 7
- IF StrCmp(str, 'TRUE',l) THEN RETURN STRLEN, 5
- CASE "U"
- IF StrCmp(str, 'UNTIL',l) THEN RETURN STRLEN, 6
- CASE "V"
- CASE "W"
- IF StrCmp(str, 'WHILE',l) THEN RETURN STRLEN, 6
- CASE "X"
- CASE "Y"
- CASE "Z"
- ENDSELECT
-
- ENDPROC NIL
-
- PROC getLabelLen(str)
- DEF c:REG, i:REG
- i := 0
- WHILE (c := str[i])
- SELECT 128 OF c
- CASE "0" TO "9", "A" TO "Z", "a" TO "z", "_"
- i++
- DEFAULT
- RETURN i
- ENDSELECT
- ENDWHILE
- ENDPROC i
-
- EXPORT PROC hlText(rp:PTR TO rastport, str, len, pentable:PTR TO CHAR)
- DEF llen, s[1000]:STRING, oldx, oldy, x, y, slen, oldfg, oldbg, c, t, t2
- -> keep this in vars for faster access..
- DEF y2, txwidth, xmin1
-
- oldx := rp.cp_x
- oldy := rp.cp_y
- oldfg := rp.fgpen
- oldbg := rp.bgpen
-
- x := oldx
- y := oldy
-
-
- SetDrMd(rp, 1)
-
- StrCopy(s, str, len)
- IF len = 0 THEN SetStr(s, 0) -> crap EC !
-
- y2 := y-1+rp.txheight
- txwidth := rp.txwidth
-
- WHILE (c := s[])
- SELECT 128 OF c
- CASE "A" TO "Z"
- llen := getLabelLen(s)
- IF s[llen] = "("
- IF ifu(s,llen) = llen -> if true, it is ifunc
- SetAPen(rp,pentable[9]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ELSE -> system function
- SetAPen(rp,pentable[8]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ENDIF
- ELSE -> not function
- t, t2 := ikw(s,llen)
- IF t = llen -> if true, it is keyword
- SetAPen(rp,pentable[t2]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ELSE -> constant
- SetAPen(rp,pentable[4]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ENDIF
- ENDIF
- CASE "a" TO "z"
- llen := getLabelLen(s)
- IF s[llen] = "("
- SetAPen(rp,pentable[11]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ELSE
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- ENDIF
- CASE "#"
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- x := x + txwidth
- s++
- llen := getLabelLen(s)
- SetAPen(rp,pentable[12]) ; RectFill(rp,x,y,x+(txwidth*llen)-1,y2)
- x := x + (txwidth*llen)
- s := s + llen
- CASE "(", ")", "[", "]", "{", "}"
- SetAPen(rp,pentable[3]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- x := x + txwidth
- s++
- CASE "\q"
- t := InStr(s+1, '\q')
- IF t <> -1
- t := t + 2
- SetAPen(rp,pentable[10]) ; RectFill(rp,x,y,x+(txwidth*t)-1,y2)
- ELSE
- t := 1
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- ENDIF
- x := x + (txwidth*t)
- s := s + t
- CASE "\a"
- t := InStr(s+1, '\a')
- IF t <> -1
- t := t + 2
- SetAPen(rp,pentable[10]) ; RectFill(rp,x,y,x+(txwidth*t)-1,y2)
- ELSE
- t := 1
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- ENDIF
- x := x + (txwidth*t)
- s := s + t
- CASE "-"
- IF s[1] = ">"
- slen := StrLen(s)
- SetAPen(rp,pentable[2]) ; RectFill(rp,x,y,x+(txwidth*slen)-1,y2)
- x := x + (txwidth*slen)
- s := s + slen
- ELSE
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- x := x + txwidth
- s++
- ENDIF
- CASE "/"
- IF s[1] = "*"
- t := Abs(InStr(s+2, '*/')) + 4
- SetAPen(rp,pentable[2]) ; RectFill(rp,x,y,x+(txwidth*t)-1,y2)
- x := x + (txwidth*t)
- s := s + t
- ELSE
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- x := x + txwidth
- s++
- ENDIF
- ->CASE "$", "%", "1" TO "9", "0"
- -> t, llen := Val(s)
- -> IF llen
- -> Box(x,y,x+(txwidth*llen)-1,y2, pentable[4])
- -> x := x + (txwidth*llen)
- -> s := s + llen
- -> ELSE
- -> Box(x,y,x-1+txwidth,y2, pentable[1])
- -> x := x + txwidth
- -> s++
- -> ENDIF
- DEFAULT
- SetAPen(rp,pentable[1]) ; RectFill(rp,x,y,x-1+txwidth,y2)
- x := x + txwidth
- s++
- ENDSELECT
- ENDWHILE
-
- rp.cp_x := oldx
- rp.cp_y := oldy + rp.txbaseline
- rp.fgpen := oldbg -> !
- rp.bgpen := oldfg
-
- SetDrMd(rp, 4)
-
- Text(rp,str,len)
-
- c := rp.fgpen -> !
- rp.fgpen := rp.bgpen
- rp.bgpen := c
-
- SetDrMd(rp,1)
-
- rp.cp_x := oldx
- rp.cp_y := oldy + rp.txheight
-
- ENDPROC